package model

type ThingInfo struct {
	List  []ThingItem `json:"thingList"`
	Total int         `json:"total"`
}

type ThingItem struct {
	// item 的类型 1=用户自己的设备 2=别人分享的设备 3=自己的群组
	ItemType int `json:"itemType"`

	// 根据 itemType 有不同的结构 1 和 2 时参见【获取全部设备列表】接口中的 deviceList 列表 item 说明 3 时参见【获取设备群组列表】接口中的 groupList 列表 item 说明
	ItemData interface{} `json:"itemData"`

	// 排序号
	Index int `json:"index"`
}

type DeviceItem struct {
	// 设备名称
	Name string `json:"name"`

	// 设备 ID
	DeviceId string `json:"deviceid"`

	// 设备所属用户的 apikey
	AppKey string `json:"apikey"`

	// factoryDevice 的 extra 字段中的内容
	Extra DeviceExtra `json:"extra"`

	// 品牌名称
	BrandName string `json:"brandName"`

	// 设备 品牌 Logo url
	BrandLogo string `json:"brandLogo"`

	// 是否显示品牌
	ShowBrand bool `json:"showBrand"`

	// 产品型号名称
	ProductModel string `json:"productModel"`

	// 设备所属的群组信息列表
	DevGroups []DeviceGroup `json:"devGroups"`

	// 标签对象，里面是存储的是自定义字符串，服务器只负责透传
	Tags map[string]string `json:"tags"`

	// 设备端配置信息
	DevConfig DeviceConfig `json:"devConfig"`

	// 用户设置
	Settings Setting `json:"settings"`

	// 设备的家庭设置
	Family Family `json:"family"`

	// 如果设备是别人分享过来的，就会有该属性。
	SharedBy ShareBy `json:"sharedBy"`

	// 被分享用户的列表，表示用户把设备分享给了哪些人。
	ShareTo []ShareTo `json:"shareTo,omitempty"`

	// 设备的出厂 apikey
	Devicekey string `json:"devicekey"`

	// 在线状态
	Online bool `json:"online"`

	// 设备的状态属性
	Params ShareBy `json:"params"`

	// GSM 设备的卡状态对象
	GsmInfoData GSMInfo `json:"gsmInfoData"`
}

// 设备扩展信息
type DeviceExtra struct {
	// 固件名称
	Model string `json:"model"`

	// UI 的名称
	Ui string `json:"ui"`

	// UI 的 ID
	Uiid int `json:"uiid"`

	// 出厂信息备注，一般是订单号
	Description string `json:"description"`

	// 制造商
	Manufacturer string `json:"manufacturer"`

	// mac 地址
	Mac string `json:"mac"`

	// ap mac 地址（设备热点的地址）
	Apmac string `json:"apmac"`

	// 产品型号 ID
	ModelInfo string `json:"modelInfo"`

	// 品牌 ID
	BrandId string `json:"brandId"`

	// 芯片 ID
	Chipid string `json:"chipid"`
}

// 设备所属的群组信息
type DeviceGroup struct {
	// 1 代表设备群组
	Type int `json:"type"`

	// 所属群组的 id
	GroupId int `json:"groupId"`
}

type DeviceConfig struct {
	// 服务器名称
	P2pServerName string `json:"p2pServerName"`
	// 账号
	P2pAccout string `json:"p2pAccout"`
	// license
	P2pLicense string `json:"p2pLicense"`
}

type Family struct {
	// 家庭 id
	Familyid string `json:"familyid"`

	// 设备排序号 可能存在负数
	Index int `json:"index"`

	// 所属房间 id
	Roomid string `json:""`
}

// 设备被分享属性
type ShareBy struct {
	// 设备所属用户的唯一标识（目前使用对称加密该字符串）
	Apikey string `json:"apiKey"`

	// 用户的权限值，默认为 0
	Permit int `json:"permit"`

	// 设备所属用户手机号
	PhoneNumber string `json:"phoneNumber"`

	// 设备所属用户 email
	Email string `json:"email"`

	// 设备所属用户的昵称
	Nickname string `json:"nickname"`

	// 分享时的备注
	Comment string `json:"comment"`

	// GMT 标准时间，毫秒数，主要用来在客户端显示排序。
	ShareTime int64 `json:"shareTime"`
}

// 设备分享出去实体
type ShareTo struct {
	// 用户的权限值，默认为 0
	Permit int `json:"permit"`

	// 设备所属用户的唯一标识（目前使用对称加密该字符串）
	Apikey string `json:"apiKey"`

	// 设备所属用户手机号
	PhoneNumber string `json:"phoneNumber"`

	// 设备所属用户 email
	Email string `json:"email"`

	// 设备所属用户的昵称
	Nickname string `json:"nickname"`

	// 分享时的备注
	Comment string `json:"comment"`

	// GMT 标准时间，毫秒数，主要用来在客户端显示排序。
	ShareTime int64 `json:"shareTime"`
}

//  GSM 设备的卡状态对象
type GSMInfo struct {
}

type Outlet4Switch struct {
	// 开关参数
	Switches []OutletSwitch `json:"switches,omitempty"`

	// 定时器参数
	Timers []Timer `json:"timers,omitempty"`
}

// 开关通道信息
type OutletSwitch struct {
	// 开关，固定值off,on
	Switch string `json:"switch"`

	// 插座通道号，从0开始
	Outlet int `json:"outlet"`
}

type Timer struct {
	// 是否启用: 0 表示禁用；1 表示启用
	Enabled int `json:"enabled"`

	// 定时标记，可以理解为该定时器的 ID，不能重复，UUID 格式，可以使用库生成
	MId string `json:"mId"`

	// 设备端使用， once 单次定时和延时；repeat 重复定时；duration 循环定时
	Type string `json:"type"`

	// 客户端使用， once 单次定时；repeat 重复定时；duration 循环定时；delay 延时定时
	CoolkitTimerType string `json:"coolkit_timer_type"`

	// 执行时间:  UTC 时间
	At string `json:"at"`

	// 要执行的动作,比如设置为 OutletSwitch 来控制开关
	Do interface{} `json:"do"`

	// 循环定时专用: 周期开始要执行的动作
	StartDo interface{} `json:"startDo"`

	// 循环定时专用: 随后再执行的动作
	EndDo interface{} `json:"endDo"`

	// 延时定时专用: 延时时间，单位为分钟
	Period string `json:"period"`
}
